
// 数组中添加另外一个数组

let arr1 = [1,3,5];
console.log(arr1)
let arr2 = [2,...arr1,6]; // [2,1,3,5,6]
console.log(arr2)
arr2.push(...arr1);	// [2,1,3,5,6,1,3,5]
console.log(arr2)

// 使用 prmoise 的使用
/* *------------------------------------------------------------------------ */
    // 生成随机数
    function rand(m, n) {
    return Math.ceil(Math.random() * (n - m + 1) + m - 1);
}

// 获取元素对象
const btn = document.querySelector('button');
// 绑定单击事件
btn.addEventListener('click', function () {
    // Promise 形式实现
    // resovle 解决  是函数类型的数据 异步任务成功时调用
    // reject  拒绝  是函数类型的数据 异步任务失败时调用
    let p = new Promise((resolve, reject) => {
        setTimeout(() => {
            // 30% 中奖概率，如果数字为1—100，那么我们随机数小于30，就认为它中奖了
            // 获取从 1 - 100 的一个随机数
            let n = rand(1, 100);
            // 判断
            if (n <= 30) {
                resolve(); // 将 promise 对象的状态设置为 成功
            } else {
                reject();  // 将 promise 对象的状态设置为 失败
            }
        }, 1000);
    });

    // 调用 then 方法
    // then方法的第一个回调函数，promise对象状态为成功时调用，第二个回调函数，promise对象状态为失败时调用
    p.then(() => {
        alert('恭喜恭喜，奖品为 10万 RMB 玛莎拉蒂优惠券');
    }, () => {
        alert('再接再厉');
    })
})
/* ------------------------------------------------------------- */
//promise resolve 使用   reject 同理
/* ------------------------------------------------------------- */


    // 如果传入的参数为 非Promise类型的对象，返回的结果为 成功的Promise对象
    // 如果传入的参数为 Promise对象，则参数的结果决定了resolve的结果
  let p1 = Promise.resolve(555);
console.log(p1);    // Promise {<fulfilled>: 555}

let p2 = Promise.resolve(new Promise((resolve, reject) => {
    resolve('OK');
}));

console.log(p2);    // Promise {<fulfilled>: "OK"}

// 传入失败的Promise
let p3 = Promise.resolve(new Promise((resolve, reject) => {
    reject('Error');
}));
console.log(p3);    // Promise {<rejected>: "Error"}
// 失败的同时还报错了，原因是没有对错误进行处理，这里使用catch()进行处理就能解决报错
p3.catch(reason => {
    console.log(reason);    // Error 
})

/* ------------------------------------------------------------- */

//综合使用
/* ------------------------------------------------------------- */
    let p = new Promise((resolve, reject) => {
        // setTimeout(() => {   //  异步任务
        resolve('OK');  // 同步任务
        // }, 1000)

    })    

    p.then(value => {
        console.log(value); 
    }, reason => {

    })
    // 1. 当Promise构造函数中的executor执行器函数内部是同步任务时，先改变状态，在执行then()方法指定回调（注意是指定回调，不是执行回调）

    // 2. 当Promise构造函数中的executor执行器函数内部是异步任务时，那么是先执行then()方法指定回调函数，再改变状态。

    /* ------------------------------------------------------------- */
